Skip to content

Implement exact-parent authored graph effects - #921

Merged
flyingrobots merged 62 commits into
mainfrom
feat/authored-effect-bridge
Oct 21, 2026
Merged

flyingrobots merged 62 commits into
mainfrom
feat/authored-effect-bridge

Conversation

@flyingrobots

@flyingrobots flyingrobots commented Oct 19, 2026 •

Copy link
Copy Markdown
Owner

Goal

Implement the generic exact-parent evaluation-to-effect bridge needed by compiler-authored operations. Echo must witness actual reads, authenticate the package's laws, interpret typed instructions, derive its own patch, and publish atomically with receipts/WAL and fresh-engine recovery of the original decision. Application algorithms remain authored outside Echo.

Plan

  • Record typed node/atom and whole-bucket range reads against exact runtime parents with lawful permissions, shared meters and bounded canonical read images.
  • Consolidate publication/program/semantic closure, package policy/admission, installation/catalog/recovery and invocation models into one current representation per concept.
  • Bind canonical Core, ordered Target IR, exports, source, lawpack, adapter, target profile and intrinsic catalog; enforce ordered correspondence and lexical identity.
  • Share pure-expression/helper typing, authenticate imported declarations, preserve nominal identity, and enforce concrete declared intrinsic/fault agreement plus the implemented node-read ABI.
  • Privately execute prepared ordered read/let/require bodies and buffer all five compiled mutation intents through the runtime-bound frame and shared evaluator/meter.
  • Retain one completed authored execution with its exact program/input/parent/output, mutation buffer and actual read image; refuse mixed or substituted origins.
  • Derive private whole-parent patches for all five mutations with charged resolution and owner/installation/program/parent checks.
  • Admit the current bounded authored-effect configuration declaration and retain a public compiler before/after refusal witness.
  • Make the same current publication checker available without host authority features; keep runtime helpers private and owner constructors gated.
  • Implement public authored-effect lowering, independent verification and target resources; consolidate remaining fixed configuration version dispatch.
  • Bind admitted effect invocations and read images to scheduler Actions, proposals and retained decisions.
  • Complete source/compiler/profile authority and typed mutation execution with deterministic physical allocation; implement all five effects, exact schemas/identities and canonical obstruction precedence; derive complete patches and write claims.
  • Integrate atomic same-Tick conflicts, receipts, WAL publication and fresh-engine verification of the original effect decision.
  • Prove genuine public compiler-authored end-to-end editing with positive, refusal, resource and adversarial cases; complete checks and review.

Current status

Checkpoint 6d4fb3e9 applies two of the owner's rulings. Failure names (option i): on the authored route the catalog names echo.dpo@1.node-atom-read's failures with Edict ABI identifiers (atomMissing, atomRequired, atomTypeMismatch, atomByteBoundExceeded). One Echo-owned table, edict_effects::failure_names, keyed by intrinsic and catalog name together, pins each to the runtime tag Echo records (echo.atom-missing/v1, ...). The read ABI check requires exactly that set and its authority classes; execution translates lowered arms through the table and refuses missing, unknown, repeated or tag-spelled names with no pass-through. Jim's adapter alias missing maps to atomMissing, recorded as echo.atom-missing/v1; application aliases never enter Echo's table. The bounded-read route keeps its runtime-tag mappings. Obstruction header (option 3): an authored effect package no longer carries obstruction_coordinate; its embedded exports declare every obstruction and admission still checks each arm's declaration and authority. The effect-package shape, its program kind and its retained control exist only on this unreleased branch (none reached main or a tag), so the shape is amended in place. The shared echo.operation-package/v1 decoder now requires the header for fixed-profile packages and forbids it for effect packages, so fixed-profile bytes and identities are unchanged. The lowerer component was promoted from det-gates run 39585969546 (two byte-identical candidates, 489,413 bytes, SHA-256 6880fe89...cea2); the verifier is unchanged. Provider identity is sha256:6287e569...7600.

The closed runtime-intrinsic catalog family (exact six, 11-field schema, explicit guard fields, failure contract with pinned runtime tags) is implemented and tested on local branch wip/runtime-intrinsics-catalog but not landed here: adding entries to the shipped catalog changes the echo.dpo@1 target profile's identity, which every retained real-compiler capture in the lowerer and verifier suites pins (about 80 tests, about 30 fixture files, and the host witness). Landing it needs those captures recompiled through Edict against the new provider.

Current data-checker checkpoint cd75aa04 makes ExecutableOperationPackage::prepare available without trusted_runtime or native_rule_bootstrap. It compiles the same current effect/Core/Target/profile checker, keeps trusted helper modules private in that build, and retains all owner-constructor gates. Fresh outer pins cannot admit invalid embedded compiler bytes or a substituted Core closure. Preparation does not authenticate source-to-Core compilation, select an authorized release pin, install a package, or grant invocation rights.

Validation passed 97 tests with trusted-host features and the three publication controls with those features disabled. An external client compiles against the preparation API; imports of TrustedRuntimeHost and the private frame helper are separately refused. Strict Clippy passed in default, trusted-host and bootstrap-only configurations; bare wasm32-unknown-unknown library checking and warnings-as-errors documentation generation passed with Rust 1.96. Full SPDX, format and diff checks passed. The fixtures remain explicitly synthetic, and this is not a component build/audit or public compiler proof.

Public effect producer/verifier integration remains unfinished. Reusing the checker in the provider guest requires a coherent authenticated toolchain update: the runtime requires Rust 1.96, while component builds remain pinned to Rust 1.90. The previous 09239c7c hosted run failed four checks: the lowerer build and G4 comparison rejected the stale checked component, the actual-host generated-helper comparison failed, and the downstream evidence gate failed. Current-head hosted checks are pending. No merge readiness is claimed.

Schema checkpoint 09239c7c admits the native factory's current effect envelope through the provider's owning echo-operation-package root. Anchored and effect envelopes reuse a common current field group. Effect closure metadata has no duplicate outer lawpack; anchored projection/lawpack requirements remain intact. The program remains opaque to schema admission. A malformed-program control passes metadata admission but is refused by runtime preparation even with a fresh package pin.

A synthetic factory-produced wire control first passed the current runtime decoder and failed owning-root admission, then passed both after the schema change. Current-schema tests cover required fields, 32-byte identities, budget/coordinate types, closed envelopes, unsupported schema versions and extra outer lawpack metadata. Native related validation passes 168 tests across 13 suites with one ignored test, plus strict changed-target Clippy, full SPDX checking, formatting and all artifact/package/asset freshness checks. Schema, helper, provenance, package metadata and digest goldens were regenerated together. The provider schema is now 8e4f82bb48bab1bdc11f22b3c37de49edaf87028aa365b15ef061ac07f990a10.

The native effect_publication::encode_effect_publication factory preserves the retained compiler bundle and derives embedded identities. It produces untrusted proposals, is not called by the public lowerer yet, and does not verify compiler correspondence, graph-law semantics, policy authority or execution. Synthetic controls are not public compiler outputs or independent verifier results. Runtime decoder dependencies/features remain dev-only for the producer.

The preceding catalog-transport checkpoint requires explicit bounded intrinsicCatalog bytes and checks canonical encoding, root shape and the exact owner-framed reference in the selected target profile. Its refusal controls remain green. Existing exact profile admission and catalog-to-export nominal agreement remain enforced.

Publication boundary: the checked lowerer component binds the current provider schema 8e4f82bb...0a10. Main #925 is merged at c4745f8 with all six post-merge workflows green.

The PR remains draft. Genuine public effect compilation, validated public producer integration, independent verification, complete authenticated profile/catalog delivery and the remaining runtime acceptance scope below are unfinished. Parallel historical contract/configuration/Target-IR paths remain unfinished under the user's one-current-version policy. No package generated by the public effect compiler path or installed execution is claimed.

One current publication, program sum, semantic closure, admission policy/token, installed record/catalog, invocation and recovery collection serve fixed and authored-effect program kinds. Owner invocation admission independently checks installed meaning, authority/grants, input binding, budgets and the actual parent. Installation recovery works, including fixed-program Action recovery with an effect installation present in either installation order. Superseded structures and decoders were removed without compatibility aliases. The user confirmed there are no saved histories to preserve; historical versions belong only in separate migration tools.

The exact echo.compiler-produced-effect-program/v1 bundle binds canonical Core, ordered Target IR and exports. Bodies with effects additionally require canonical source, lawpack, adapter, target-profile and intrinsic-catalog artifacts. Preparation checks their hash chain, selected intent/output, shared constraints/budgets/basis, complete instruction order, lexical references, adapter authorization and mapped failures. Imported declarations bind to exported definitions; shared inference preserves nominal identities. Concrete single-argument signatures and fault contracts must agree with the catalog. The implemented node-read ABI independently fixes three 32-byte address fields, a bounded direct byte result and four fault tags/classes. The five mutation emitters below are also recognized; further intrinsic families, polymorphism and positional argument unpacking remain unsupported.

Private ordered authored evaluation now runs through EffectEvaluationFrame::evaluate_effect. It requires a runtime-bound frame, exact program/frame footprint-law equality and a valid typed aperture. Typed let/read/require instructions reuse the existing expression/helper evaluator, runtime value checks, cumulative meter and real typed recording adapter. Core/program/frame resource ceilings intersect. Successful node/atom pairs must satisfy the prepared graph schema. False requirements evaluate their terminal payloads; supported zero-argument mapped failure constructors yield their authored source-context name and empty payload. Refusals terminate the frame and retain completed dependencies. Successful calls retain cumulative usage and observations.

Five compiler-targeted mutation emitters now buffer typed EnsureNode, CreateNode, ReplaceAtom, EnsureEdge and ReplaceEdge intents. They require the explicit continuum.profile.graph-effects/v1 Core/Target profile, concrete single-record arguments and empty-record results. The runtime fixes their input fields and 32-byte identities independently of metadata, keeps node and atom types distinct, and retains replacement comparisons. Each emission atomically admits one step, 280 logical row bytes and fixed write bytes: 64 plus atom payload length for node/atom effects, or 128 for edges. The already charged payload moves into the typed intent without copying. Only a successful whole authored operation retains its entire buffer; guard/resource/output failure discards its partial intents. Whole authored evaluation requires an unused frame and ends evaluation on success, so another component/program cannot contribute work or append to the result. Read-only profiles cannot authorize emission. The frame exposes a read-only data view, with no public entry point accepting caller-constructed intents as evidence. Emission reads no target state and modifies no frontier, but its fixed write-byte charge applies even when Ensure later resolves identically. A whole operation may emit at most 1,024 effects, including duplicates and later no-ops. The next emission refuses without exposing a partial buffer, while retaining prior successful charges. Proposal resolution still determines actual write slots.

A consuming into_effect_evaluation crossing now returns one opaque CompletedEffectEvaluation, retaining the exact producing program identity, canonical-input basis binding, actual output, emitted intents and actual recorded-read image. Program identity and input-basis recipes are shared with the existing program identity and invocation admission code. The input binding must equal the runtime parent's application basis. Changing otherwise valid input cannot yield completion under its old binding. Output storage is borrowed during evaluation and moved into completion with the intent buffer; it is not cloned. Unused/failed/mixed frames and bounded read-export failures cannot deliver this completed value. The sole full parent and usage counters come from the read image. This is execution-origin evidence, not installed-package authority or independent compiler/verifier approval.

The runtime owner consumes a completed evaluation and independently admitted invocation to derive a counterfactual patch at the exact unchanged full parent. Both admission and completed evaluation must carry this owner's private process-local evaluation authority, in addition to installation/program/parent checks. An adversarial witness reproduced foreign completion crossing when parent tuples matched but detached store contents differed. The frame now moves its owner binding into opaque completion, and derivation refuses that foreign origin before using its data. Matching reachable-state roots do not establish equal stores. Owned-parts host reconstruction preserves the authority; it is not serialized recovery evidence.

All five effects have operation-shape witnesses. Validation enforces schema, content/mutable-slot identity, comparisons, endpoints, typed permissions and resolved write limits. Idempotent Ensure emits no writes but retains emission costs and still requires write permission. Validation usage includes successful evaluation and resolution prefixes. Prior-read reachability uses canonical read-image slot order. Descendant mutation tests verify one- and two-level alpha-portal dependency slots and exact charges, with forbidden-owner/beta refusal witnesses. Read-only authored work retains its two observed slots in an empty derived patch without recharging. Independent program and application-basis substitutions refuse under the same owner. Competing-failure witnesses cover schema/identity/footprint/precondition phase precedence.

This remains private whole-parent derivation. No operations are applied and installed authored-effect Action dispatch still refuses. Scoped-history admission, same-Tick conflicts, physical allocation guarantees, retained decisions and original-decision recovery remain open. Additional adversarial coverage and the full scoped-history/composition contract remain required before treating the bridge as complete.

The public configuration boundary now recognizes an explicit edict-effect-program/v1 declaration with nonempty encoded graph-schema/footprint-law payloads, identity law 1, bounded input/result/allocation ceilings and explicit I/O/step budget. A fresh unmodified Edict build at 1d287ef and admitted source-function provider candidates give a controlled witness: identical authored source/lawpack/configuration hashes refuse at 05-target-configuration before this schema change and reach ProviderLowererRefused / UnsupportedSemantics afterward. An existing public bounded-read control still succeeds with package and independent verifier-report bytes identical to the original provider. No emitted Core or Target IR is rewritten. This does not produce or verify a generic authored-effect package: the lowerer route and target intrinsic/profile/resource work remain open. Existing fixed-operation v1/v2 configuration dispatch is also still noncompliant with the single-current-version rule and must be consolidated.

Producer-boundary checkpoint validation: 69 tests across eight Wesley generation/schema/package/corpus suites pass, along with strict changed-target Clippy, formatting/SPDX/feature scheduling and all three artifact/package/assets exact checks. Generated schema, provenance, package manifest and consumer golden pins are refreshed together. Prior runtime-owner checkpoint validation below covers the unchanged runtime code, not a new full core run.

The retained raw public capture has inconsistent lawpack pins, a prior Target IR profile reference and a catalog declaring only the original replace fixture. Positive tests use an explicitly synthetic, coherently repinned read catalog and artifact chain. They do not prove genuine public effect compilation or independent verifier acceptance. Complete source-to-Core proof, graph-schema/export authority, target schema/profile resources, general intrinsic contracts, constructor payload/taxonomy authority and cost/footprint/configuration calculus remain open. Complete pure-main/projection refinement-aware static typing also remains open.

The approved proposal requires emission charges and a 1,024-effect ceiling. The buffering prototype incorrectly deferred write-byte charging and omitted the count ceiling. Those corrected semantics remain enforced during private mutation validation/patch derivation. Fixed step/write/row admission is atomic; a write-budget or row-reservation failure commits none of that emission charge. Earlier expression work and successful emission charges remain consumed even when the operation later fails.

Validation for this checkpoint: all 80 package tests pass. The cross-owner completion witness failed before the owner binding and passed after it. Final-source owner/host-enabled core validation passed 2,164 primary tests, zero failures and nine ignored across 100 primary Cargo groups, including 30 passing doctests and six ignored. Six child-process test results also pass, yielding a raw log total of 2,170 passes across 106 result groups. The count audit selects each top-level harness result once. Final strict all-target owner/host Clippy, formatting, global-state/nondeterminism/serialization guards, SPDX and feature-test scheduling pass.

receipt_correlations_for_current_basis is now gated like its only non-test caller, so trusted-runtime-only builds are warning-free. New derivation internals are gated consistently with the runtime-owner host. The owner/host-enabled strict all-target configuration passes. Fresh hosted checks must finish for this pushed head. The PR remains a draft.

The genuine flat-text capacity probe at b46455c succeeded through 65,536 bytes but refused at 1,048,576 bytes under the tested allocation/shared-step ceilings. Full-size acceptance, remaining language capabilities, complete AVL acceptance and the final Jim dependency update remain part of the cross-repository objective.

@coderabbitai

coderabbitai Bot commented Oct 19, 2026 •

Copy link
Copy Markdown
Contributor

Important

Review skipped

Too many files!

This PR contains 102 files, which is 2 over the limit of 100.

To get a review, reduce the PR to 100 files or fewer by splitting it into smaller PRs or changing its base branch.

Upgrade to a paid plan to raise the limit.

This review couldn't start because sufficient usage credits or metered capacity aren't available. Add credits or update usage-based reviews in the billing tab, then retry.

Check out review usage here.

⚙️ Run configuration
  • Configuration used: Repository: flyingrobots/echo/.coderabbit.yaml
  • Review profile: ASSERTIVE
  • Plan: Advanced
  • Run ID: b1f4d759-8dfe-414b-9260-db96a2da5bac
📥 Commits

Reviewing files that changed from the base of the PR and between c1841df and e57d101.

⛔ Files ignored due to path filters: 12
  • crates/echo-wesley-gen/assets/v1/edict-provider/package/v1/components/lowerer.echo-dpo.component.wasm is excluded by !**/*.wasm
  • crates/echo-wesley-gen/assets/v1/edict-provider/package/v1/generated/evidence/provenance.provider-generation.json is excluded by !**/generated/**
  • crates/echo-wesley-gen/assets/v1/edict-provider/package/v1/generated/evidence/review.provider-generation.json is excluded by !**/generated/**
  • crates/echo-wesley-gen/assets/v1/edict-provider/package/v1/generated/primary/schema.echo-provider-artifacts.cddl is excluded by !**/generated/**
  • schemas/edict-provider/components/v1/lowerer.echo-dpo.component.wasm is excluded by !**/*.wasm
  • schemas/edict-provider/generated/v1/evidence/provenance.provider-generation.json is excluded by !**/generated/**
  • schemas/edict-provider/generated/v1/evidence/review.provider-generation.json is excluded by !**/generated/**
  • schemas/edict-provider/generated/v1/primary/schema.echo-provider-artifacts.cddl is excluded by !**/generated/**
  • schemas/edict-provider/package/v1/components/lowerer.echo-dpo.component.wasm is excluded by !**/*.wasm
  • schemas/edict-provider/package/v1/generated/evidence/provenance.provider-generation.json is excluded by !**/generated/**
  • schemas/edict-provider/package/v1/generated/evidence/review.provider-generation.json is excluded by !**/generated/**
  • schemas/edict-provider/package/v1/generated/primary/schema.echo-provider-artifacts.cddl is excluded by !**/generated/**
📒 Files selected for processing: 102
  • .ban-nondeterminism-allowlist
  • .github/workflows/ci.yml
  • AGENTS.md
  • CHANGELOG.md
  • README.md
  • crates/echo-alloc-witness/tests/action_preparation_allocation.rs
  • crates/echo-edict-provider-lowerer/Cargo.toml
  • crates/echo-edict-provider-lowerer/README.md
  • crates/echo-edict-provider-lowerer/src/effect_publication.rs
  • crates/echo-edict-provider-lowerer/src/executable_operation.rs
  • crates/echo-edict-provider-lowerer/src/executable_operation/effect_resources.rs
  • crates/echo-edict-provider-lowerer/src/lib.rs
  • crates/echo-edict-provider-lowerer/tests/bounded_read.rs
  • crates/echo-edict-provider-lowerer/tests/current_effect_publication.rs
  • crates/echo-edict-provider-lowerer/tests/executable_operation_package.rs
  • crates/echo-edict-provider-lowerer/tests/fixtures/current-effect-wire/README.md
  • crates/echo-edict-provider-lowerer/tests/fixtures/current-effect-wire/bundle.hex
  • crates/echo-edict-provider-lowerer/tests/fixtures/current-effect-wire/configuration.hex
  • crates/echo-edict-provider-lowerer/tests/fixtures/current-effect-wire/source.hex
  • crates/echo-edict-provider-lowerer/tests/fixtures/generated_echo_dpo.rs
  • crates/echo-edict-provider-lowerer/tests/lowerer_contract.rs
  • crates/echo-wesley-gen/assets/v1/edict-provider/package/v1/provider-manifest.echo.json
  • crates/echo-wesley-gen/src/provider_artifacts.rs
  • crates/echo-wesley-gen/tests/fixtures/current-effect-publication/README.md
  • crates/echo-wesley-gen/tests/fixtures/current-effect-publication/package.hex
  • crates/echo-wesley-gen/tests/provider_effect_schema.rs
  • crates/echo-wesley-gen/tests/provider_package.rs
  • crates/echo-wesley-gen/tests/provider_package_corpus.rs
  • crates/warp-core/Cargo.toml
  • crates/warp-core/benches/support/action_scene.rs
  • crates/warp-core/src/coordinator.rs
  • crates/warp-core/src/echo_operation.rs
  • crates/warp-core/src/echo_operation/observed.rs
  • crates/warp-core/src/edict_effects.rs
  • crates/warp-core/src/edict_effects/compiled_program.rs
  • crates/warp-core/src/edict_effects/completion.rs
  • crates/warp-core/src/edict_effects/derive.rs
  • crates/warp-core/src/edict_effects/derive/checks.rs
  • crates/warp-core/src/edict_effects/derive/context.rs
  • crates/warp-core/src/edict_effects/execution.rs
  • crates/warp-core/src/edict_effects/failure_names.rs
  • crates/warp-core/src/edict_effects/frame.rs
  • crates/warp-core/src/edict_effects/imported_types.rs
  • crates/warp-core/src/edict_effects/instruction_relation.rs
  • crates/warp-core/src/edict_effects/intrinsic_contract.rs
  • crates/warp-core/src/edict_effects/law.rs
  • crates/warp-core/src/edict_effects/lowering_relation.rs
  • crates/warp-core/src/edict_effects/mutations.rs
  • crates/warp-core/src/edict_effects/node_reads.rs
  • crates/warp-core/src/edict_effects/package.rs
  • crates/warp-core/src/edict_effects/read_image.rs
  • crates/warp-core/src/edict_effects/read_image/encode.rs
  • crates/warp-core/src/edict_effects/read_image/rows.rs
  • crates/warp-core/src/edict_effects/read_image/validate.rs
  • crates/warp-core/src/edict_effects/runtime_abi.rs
  • crates/warp-core/src/edict_effects/schema.rs
  • crates/warp-core/src/edict_effects/typed_reads.rs
  • crates/warp-core/src/edict_effects/value_digest.rs
  • crates/warp-core/src/edict_pure.rs
  • crates/warp-core/src/edict_pure/evaluate.rs
  • crates/warp-core/src/edict_pure/functions.rs
  • crates/warp-core/src/edict_pure/model.rs
  • crates/warp-core/src/edict_pure/syntax.rs
  • crates/warp-core/src/edict_read.rs
  • crates/warp-core/src/edict_read/access.rs
  • crates/warp-core/src/edict_read/evaluate.rs
  • crates/warp-core/src/edict_read/view.rs
  • crates/warp-core/src/engine_impl.rs
  • crates/warp-core/src/lib.rs
  • crates/warp-core/src/trusted_runtime_host.rs
  • crates/warp-core/src/trusted_runtime_host/observed_context.rs
  • crates/warp-core/tests/common/edict_effect_publication.rs
  • crates/warp-core/tests/current_operation_publication_tests.rs
  • crates/warp-core/tests/edict_effect_admission_tests.rs
  • crates/warp-core/tests/edict_effect_admission_tests/installation.rs
  • crates/warp-core/tests/edict_effect_frame_tests.rs
  • crates/warp-core/tests/edict_effect_graph_schema_tests.rs
  • crates/warp-core/tests/edict_effect_package_tests.rs
  • crates/warp-core/tests/edict_effect_package_tests/abi_conformance.rs
  • crates/warp-core/tests/edict_effect_package_tests/completion.rs
  • crates/warp-core/tests/edict_effect_package_tests/derivation.rs
  • crates/warp-core/tests/edict_effect_package_tests/execution.rs
  • crates/warp-core/tests/edict_effect_package_tests/invocation.rs
  • crates/warp-core/tests/edict_effect_package_tests/mutations.rs
  • crates/warp-core/tests/edict_effect_range_reads.rs
  • crates/warp-core/tests/edict_effect_read_image_tests.rs
  • crates/warp-core/tests/edict_projected_cas_tests.rs
  • crates/warp-core/tests/edict_source_functions_tests.rs
  • crates/warp-core/tests/effect_publication_validation.rs
  • crates/warp-core/tests/executable_operation_pipeline_tests.rs
  • crates/warp-core/tests/fixtures/current-effect-publication/README.md
  • crates/warp-core/tests/fixtures/current-effect-publication/package.hex
  • crates/warp-core/tests/trusted_runtime_host_loop_tests.rs
  • docs/architecture/authored-operation-effects.md
  • docs/topics/GeneratedRules.md
  • schemas/edict-provider/README.md
  • schemas/edict-provider/components/v1/README.md
  • schemas/edict-provider/package/v1/provider-manifest.echo.json
  • tests/docs/test_generated_rule_truth.sh
  • xtask/src/provider_lowerer_component.rs
  • xtask/src/run_edict_operation.rs
  • xtask/src/run_edict_operation/session.rs

You can disable this status message by setting the reviews.review_status to false in the CodeRabbit configuration file.

  • Autofix · Keep fixing CodeRabbit findings and required CI, and resolving merge conflicts

Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out.

❤️ Share

Comment @coderabbitai help to get the list of available commands.

@flyingrobots

Copy link
Copy Markdown
Owner Author

@codex review

@chatgpt-codex-connector

chatgpt-codex-connector Bot commented Oct 19, 2026 •

Copy link
Copy Markdown

Codex Review Summary

This comment shows the latest Codex review activity on this pull request.

Review Status Commit Review trigger
📝 Code Review ✅ Completed 2026-10-21T13:29:51.915950Z e57d101 New commits
ℹ️ About Codex in GitHub

Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you

  • Open a pull request for review
  • Mark a draft as ready
  • Comment "@codex review" or "@codex security review".

Codex reacts with 👀 while any review is running, comments if it has suggestions, and reacts with 👍 once all reviews finish with no findings.

@chatgpt-codex-connector

Copy link
Copy Markdown

Codex Review: Didn't find any major issues. More of your lovely PRs please.

Reviewed commit: fb53a3381d

ℹ️ About Codex in GitHub

Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you

  • Open a pull request for review
  • Mark a draft as ready
  • Comment "@codex review".

If Codex has suggestions, it will comment; otherwise it will react with 👍.

Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".

@flyingrobots

Copy link
Copy Markdown
Owner Author

@codex review

@chatgpt-codex-connector

Copy link
Copy Markdown

Codex Review: Didn't find any major issues. Already looking forward to the next diff.

Reviewed commit: 9a6a501871

ℹ️ About Codex in GitHub

Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you

  • Open a pull request for review
  • Mark a draft as ready
  • Comment "@codex review".

If Codex has suggestions, it will comment; otherwise it will react with 👍.

Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".

@flyingrobots

Copy link
Copy Markdown
Owner Author

The user confirmed that there are no existing saved histories and directed a single current version of each structure, format and implementation in main crates. Historical versions may exist only in separate upgrade/migration tools. This supersedes the V1-preservation proposal: the parallel V1/V2 catalogs currently on this branch must be replaced before this draft is ready. Commit 48d2d8a records the rule in contributor guidance and current architecture documentation; the plan now requires a coordinated compiler/runtime/consumer cutover. No additional parallel grant-admission path has been added.

@flyingrobots

Copy link
Copy Markdown
Owner Author

Handover: at James's direction (2026-10-20), Claude session jim-0b now owns #921 as its single writer, to finish the authored-effect bridge so Jim's Edict-authored rope can run in a real Echo Tick with WAL. Codex: please don't push to feat/authored-effect-bridge from here on. If you have unpushed local work on it, say so in this thread and I'll merge it in rather than duplicate it. Head when I took over: cd75aa04.

Brings the bridge up to Echo main (60 commits). Test fixtures layer
main's state-configuring helper over the bridge's attachment helper so
both callers keep working, and both test blocks are kept. CHANGELOG
takes main's restructured Unreleased section and adds only the bridge's
own Changed and Added entries.
The bridge's additions to GeneratedRules.md failed verify-local's
prettier --check; formatting only.
The bridge changes echo-edict-provider-lowerer's source, so the checked
lowerer component no longer matched its designated build. G4's two
independently provisioned linux/amd64 candidates (det-gates run
39517396062 on 72007b4) are byte-identical: 489,413 bytes, SHA-256
3094faa6d7ba1641e5417e310a2061a0e1e981da571c5f035d28c1c11f41811a.

- Approved lowerer identity updated, then promoted through
  xtask provider-lowerer-component promote (two distinct files, exact
  equality, approved digest, component and world admission).
- Package-local assets and the provider package regenerated to a fixed
  point; assets --check-package-list, package --check and artifacts
  --check pass. The verifier is unchanged.
- Provider identity is now sha256:ccf92499...; the golden provider
  digest, raw manifest SHA-256 and package artifact SHA-256 in the
  echo-wesley-gen tests follow the generated bytes (nothing else in
  those tests changes). echo-wesley-gen: 210 passed.
- Component and provider READMEs state the new size and digest.
Decision (James, 2026-10-21): the six shared echo.dpo@1 runtime
intrinsics are typed by Echo-owned ABI coordinates, not application type
names, because Echo's single provider catalog cannot name any
application's types.

- runtime_abi::contract names each intrinsic's ABI input and result
  coordinates; only these exact identities get the rule, and a matching
  shape never selects an intrinsic.
- intrinsic_contract requires the catalog to name those coordinates for
  a runtime intrinsic, keeps exact name agreement for every other
  intrinsic, and binds each exported read failure to the effect's own
  declared input type while the catalog failure carries the ABI input.
- Application types keep nominal identity; runtime_abi's existing
  bounded-representation predicates decide conformance (exact 32-byte
  identities, bounded atomBytes up to 16 MiB, exact field membership,
  empty mutation result).
- GeneratedRules.md records the rule and the normative six-contract
  table.

Tests: abi_conformance covers renamed application types accepted by the
same catalog, catalogs naming application types or another intrinsic's
ABI refused, maximum-bounded and 31-byte identities refused, missing,
renamed and extra fields refused, smaller payload maxima accepted and
over-ceiling or nonzero-minimum payloads refused, non-empty results
refused, and read failures that lose their tie to the effect's input
refused. warp-core: 2182 passed; clippy clean.
… configuration

Decision (James, 2026-10-21): the effect configuration declares the
requested authority profile, as fixed-operation configurations already
do, so the lowerer and the independent verifier derive it from the same
bound bytes.

- The edict-effect-program/v1 configuration requires a nonempty
  authorityProfile label (CDDL echo-nonempty-tstr, as for fixed
  operations); absent, empty or non-text labels refuse.
- encode_effect_publication no longer takes a caller-supplied identity;
  authority_profile_identity is the existing echo:operation-profile:v1
  label digest of that field, the only source on the public route.
- GeneratedRules.md states that the digest names a label, not a
  permission manifest: the owner's admission policy and the runtime's
  program, grant, footprint and permission checks decide what a package
  may do.

Tests: the identity equals an independently written digest of the
configured label and follows a changed label; missing, empty, integer
and byte labels refuse in the factory and in the provider schema. The
provider corpus, assets and package are regenerated (provider
sha256:fa476bf1...); the three golden identities follow the generated
bytes. Lowerer and echo-wesley-gen (210) tests pass; clippy clean.
… kind

The mutation ABI required the catalog to declare effectKind "write",
a value the provider's effect-kind vocabulary (read, create, ensure,
replace, ...) cannot produce, so no generated catalog could satisfy it.
Each mutation now requires the kind naming what it does: create for
create-node, ensure for ensure-node and ensure-edge, replace for
replace-atom and replace-edge. writeClass stays write. Stricter than
before: one mutation can no longer claim another's kind.

Test: each_mutation_declares_its_own_effect_kind refuses write, read,
delete and a crossed kind; package tests 90 passed; clippy clean.
Edict's frozen intrinsic ABI (edict-common.cddl) allows writeClass read,
create, ensure, append, replace, delete or custom; it has no "write".
A provider-generated catalog therefore cannot declare the "write" class
the mutation ABI required. Each mutation's catalog and adapter write
class now equals its effect kind: create for create-node, ensure for
ensure-node and ensure-edge, replace for replace-atom and replace-edge.

Test: each_mutation_write_class_is_its_effect_kind refuses write, read
and delete for all five; package tests 91 passed; clippy clean.
…ffect package's obstruction header

Failure names (ruling 2, option i). On the authored route the catalog
names echo.dpo@1.node-atom-read's failures with Edict ABI identifiers:
atomMissing, atomRequired, atomTypeMismatch, atomByteBoundExceeded. One
Echo-owned table (edict_effects::failure_names), keyed by intrinsic and
catalog name together, pins each to the runtime tag Echo records
(echo.atom-missing/v1, ...). The read ABI check requires exactly that
set with its authority classes, and execution translates the lowered
step's arms through the table before matching a raised tag, refusing
missing, unknown, repeated or tag-spelled names with no pass-through.
Application aliases stay in the adapter: Jim's `missing` maps to
atomMissing, which Echo records as echo.atom-missing/v1. The bounded-read
route keeps its runtime-tag mappings. Test helpers derive the authored
route's adapter and Target IR from the captured ones by renaming mapping
targets, the only change Edict makes for an identifier-named adapter.

Obstruction header (ruling 3, option 3). An authored effect package no
longer carries obstruction_coordinate; its embedded exports declare every
obstruction and admission still checks each arm's declaration and
authority. Compatibility: effect_publication.rs, the edict-effect-program
kind and its retained control exist only on this unreleased branch (none
reached main or a tag), so the effect shape is amended in place. The
shared echo.operation-package/v1 decoder already varies by program kind
(lawpack binding); it now also requires the header for fixed-profile
packages, which main publishes, and forbids it for effect packages, so
fixed-profile bytes and identities are unchanged. The provider CDDL moves
the field from the shared group to the anchored variant, the lowerer's
EffectPublicationInput drops it, and the retained current-effect
publication controls are regenerated and pinned to the serializer by a
new lowerer test (they were already stale: they predated the derived
authority identity).

Also narrows receipt_correlations_for_current_basis to the features of
its only non-test caller, removing a dead-code warning from trusted_runtime
builds. Provider package assets regenerated to a fixed point; golden
digests and the lowerer's pinned provider-schema SHA-256 follow. The
lowerer component source changed, so its promotion follows from G4.
The effect publication and provider-schema changes alter
echo-edict-provider-lowerer's source, so the checked lowerer component
no longer matched its designated build. G4's two independently
provisioned linux/amd64 candidates (det-gates run 39585969546 on
8ad0ffa) are byte-identical: 489,413 bytes, SHA-256
6880fe894c151bfe28257156e5f8b721428fb06af435889a72ff401e7273cea2.
The verifier candidates equal the checked verifier, which is unchanged.

- Approved lowerer identity updated, then promoted through
  xtask provider-lowerer-component promote (two distinct files, exact
  equality, approved digest, component and world admission).
- Package-local assets and the provider package regenerated to a fixed
  point; artifacts --check, package --check and assets
  --check-package-list pass.
- Provider identity is now sha256:6287e569...; the golden provider
  digest, raw manifest SHA-256 and package artifact SHA-256 in the
  echo-wesley-gen tests follow the generated bytes.
- Component and provider READMEs state the new digest; the size is
  unchanged.
The authored-operation-effects architecture still specified a parallel
ExecutableOperationPackageV2 (closure-v2, program-v2-effect,
invocation-v2-effect, v2 domains and installation records) and v2 batch
digest domains. The code has one package, program, invocation, and
installation format under their v1 schema strings and domains, with the
program kind selecting the authored-effect payload, as the single-version
rule on this PR requires. The package section, batch digests, and the
acceptance rows now describe that format, including that an effect package
carries no obstruction_coordinate and its footprint contract uses the v1
footprint-law domain.
@flyingrobots
flyingrobots marked this pull request as ready for review October 21, 2026 11:09
@flyingrobots

Copy link
Copy Markdown
Owner Author

@coderabbitai review

@flyingrobots

Copy link
Copy Markdown
Owner Author

@codex review please, focus on the version-scoped failure-name map (closed, no pass-through), removal of obstruction_coordinate from effect packages while fixed-profile packages keep identical bytes, and that the architecture doc now matches the single v1 package format

@coderabbitai

coderabbitai Bot commented Oct 21, 2026 •

Copy link
Copy Markdown
Contributor
⚠️ Action not completed

Review rate limited.

Note: CodeRabbit is an incremental review system and does not re-review already reviewed commits. This command is applicable only when automatic reviews are paused.

@chatgpt-codex-connector

Copy link
Copy Markdown

Codex Review: Didn't find any major issues. Delightful!

Reviewed commit: 80894cbe75

ℹ️ About Codex in GitHub

Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you

  • Open a pull request for review
  • Mark a draft as ready
  • Comment "@codex review".

If Codex has suggestions, it will comment; otherwise it will react with 👍.

Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".

flyingrobots added a commit that referenced this pull request Oct 21, 2026
receipt_correlations_for_current_basis is called only by the trusted
runtime host that native_rule_bootstrap enables, so trusted_runtime builds
without it warned that the method is never used. Gate it on both features,
as on #921.
Brings in count (#929) and proven-range slice and subtraction (#931).
edict_pure::infer and check_predicate keep #921's crate visibility and
take main's proof parameter; the effect instruction relation passes
Proof::none(), so runtime slices and subtractions in effect programs
still need literal operands until effect programs carry their proofs.
Provider components and goldens take main's set until re-promotion.
The merged provider combines main's promoted components with #921's
semantic sources, so the package manifest and the provider digest
goldens move to that combination until the components are re-promoted.
Promoted from det-gates run 39606253948, whose two candidates were
byte-identical. Lowerer sha256:498d2c26 (496,879 bytes); the verifier
is unchanged at sha256:e1426a80. Provider sha256:17cca54e.
The merge introduced a static empty cap table for Proof::none(), which
Echo's ban on globals refuses. Proof::new takes caps and facts the
caller owns; the effect instruction relation passes an empty table it
creates per check.
@flyingrobots
flyingrobots merged commit 665a568 into main Oct 21, 2026
44 checks passed
@flyingrobots
flyingrobots deleted the feat/authored-effect-bridge branch October 21, 2026 13:37
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant